home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Programming / LEDA / source / src / plane / _seg_set.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-11-16  |  1.7 KB  |  65 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  _seg_set.c
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. #include <LEDA/segment_set.h>
  16.  
  17. segment  SegmentSet::key(seg_item it)
  18. { segment s(x0(it),y(it),x1(it),y(it)); 
  19.   return s.rotate(point(0,0),alpha);
  20.  }
  21.  
  22. seg_item SegmentSet::insert(segment s, GenPtr p)
  23. { segment t = s.rotate(point(0,0),-alpha);
  24.   double x0 = t.xcoord1();
  25.   double x1 = t.xcoord2();
  26.   double  y = t.ycoord1();
  27.   return segment_tree<double,double,GenPtr>::insert(x0,x1,y,p);
  28. }
  29.  
  30. seg_item SegmentSet::lookup(segment s)
  31. { segment t = s.rotate(point(0,0),-alpha);
  32.   double x0 = t.xcoord1();
  33.   double x1 = t.xcoord2();
  34.   double  y = t.ycoord1();
  35.   return segment_tree<double,double,GenPtr>::lookup(x0,x1,y);
  36. }
  37.  
  38. void     SegmentSet::del(segment s)
  39. { segment t = s.rotate(point(0,0),-alpha);
  40.   double x0 = t.xcoord1();
  41.   double x1 = t.xcoord2();
  42.   double  y = t.ycoord1();
  43.   (void)segment_tree<double,double,GenPtr>::del(x0,x1,y); 
  44. }
  45.  
  46. list<seg_item>  SegmentSet::intersection(segment q)
  47. { list<seg_tree_item> L;
  48.   segment t = q.rotate(point(0,0),-alpha);
  49.   double  x = t.xcoord1();
  50.   double y0 = t.ycoord1();
  51.   double y1 = t.ycoord2();
  52.   L = segment_tree<double,double,GenPtr>::query(x,y0,y1); 
  53.   return *((list<seg_item>*)&L);
  54. }
  55.  
  56. list<seg_item>  SegmentSet::intersection(line q)
  57. { list<seg_tree_item> L;
  58.   line t = q.rotate(-alpha);
  59.   double  x = t.x_proj(0);
  60.   L = segment_tree<double,double,GenPtr>::y_infinity_query(x); 
  61.   return *((list<seg_item>*)&L);
  62. }
  63.  
  64.